#include "functions.h"

int check_entries(int num_entries, slave_info *slave, double start, int rank) {

	static int aux = 1;

	if(num_entries <= 1) {
		slave->marks[9] = MPI_Wtime() - start;
		//printf("RANK %d: 100%c das palavras foram achadas em %.0lf segundos\n", rank, '%', slave->marks[9]);
		return 0;
	} else {
		if(num_entries < slave->total - (aux*slave->total/10)) {
			slave->marks[aux-1] = MPI_Wtime() - start;
			//printf("RANK %d: %d%c das palavras foram achadas em %.0lf segundos\n", rank, aux*10, '%', slave->marks[aux-1]);
			aux++;	
		}
	}

	return 1;
}

void remove_words(trie *words) {

	int nl;
	static char aux[6], rand_word[6];

	rand_word[0] = (char)((rand()%26)+97);
	rand_word[1] = (char)((rand()%26)+97);
	rand_word[2] = (char)((rand()%26)+97);
	rand_word[3] = (char)((rand()%26)+97);
	rand_word[4] = (char)((rand()%26)+97);
	rand_word[5] = '\0';

	for(nl=1 ; nl <= 5 ; nl++) {
		strncpy(aux, rand_word, nl), aux[nl] = '\0';
		if(trie_lookup(words, aux)) {
			trie_remove(words, aux);
			//printf("REMOVED %s\n", aux);
		}
	}
}

void split_word(trie *words, char *s) {

	int tam = strlen(s), aux = 0;
	char split[6];
	
	while(tam - aux > 0) {
		strncpy(split, s+aux, 5);
		lowercase(split);
		if(!trie_lookup(words, split))
			trie_insert(words, split);
		aux += 5;
	}

}

void lowercase(char *string) {

	int i;
	for(i=0; i < strlen(string) ; i++)
  	string[i] = tolower(string[i]);
	
}

int fsize(char *fname) {

	int size;
	FILE *f;

	// Caminha com o ponteiro até o final do arquivo, e verifica o número de bytes, que corresponde ao tamanho total
	if(!(f = fopen(fname, "r")) || fseek(f, 0, SEEK_END) || !(size = ftell(f))) {
		printf("ERRO: Erro ao leitura e utilização do arquivo. (fsize)\n");
		MPI_Abort(MPI_COMM_WORLD, -1);
	}

	fclose(f);

	return size;
}
